<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    
<meta charset="UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>


<meta http-equiv="Cache-Control" content="no-transform" />
<meta http-equiv="Cache-Control" content="no-siteapp" />

<meta name="theme-color" content="#f8f5ec" />
<meta name="msapplication-navbutton-color" content="#f8f5ec">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="#f8f5ec">



  <meta name="description" content="似乎没好好研究过HTTP状态码"/>




  <meta name="keywords" content="HTTP, 网络协议, 八一" />



  <meta name="baidu-site-verification" content="HhUstaSjr0" />



  <meta name="google-site-verification" content="UA-102975942-1" />






  <link rel="alternate" href="/atom.xml" title="八一">




  <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico?v=2.6.0" />



<link rel="canonical" href="https://bay1.top/2017/10/29/似乎没好好研究过HTTP状态码/"/>


<link rel="stylesheet" type="text/css" href="/css/style.css?v=2.6.0" />
<link rel="stylesheet" type="text/css" href="/css/prettify.css" media="screen" />
<link rel="stylesheet" type="text/css" href="/css/sons-of-obsidian.css" media="screen" />



  <link rel="stylesheet" type="text/css" href="/lib/fancybox/jquery.fancybox.css" />




  
  <script id="baidu_analytics">
    var _hmt = _hmt || [];
    (function() {
      var hm = document.createElement("script");
      hm.src = "https://hm.baidu.com/hm.js?9a885cc9fb6cd7bcef579deb8efe8a70";
      var s = document.getElementsByTagName("script")[0];
      s.parentNode.insertBefore(hm, s);
    })();
  </script>



  <script id="google_analytics">
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
        (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
        m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
        })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

        ga('create', 'UA-102975942-1', 'auto');
        ga('send', 'pageview');
  </script>










    <title> 似乎没好好研究过HTTP状态码 - 八一 </title>
  </head>

  <body><div id="mobile-navbar" class="mobile-navbar">
  <div class="mobile-header-logo">
    <a href="/." class="logo">八一</a>
  </div>
  <div class="mobile-navbar-icon">
    <span></span>
    <span></span>
    <span></span>
  </div>
</div>

<nav id="mobile-menu" class="mobile-menu slideout-menu">
  <ul class="mobile-menu-list">
    
      <a href="/archives">
        <li class="mobile-menu-item">
          
          
            文章
          
        </li>
      </a>
    
      <a href="/tags">
        <li class="mobile-menu-item">
          
          
            标签
          
        </li>
      </a>
    
      <a href="/about">
        <li class="mobile-menu-item">
          
          
            关于/友链
          
        </li>
      </a>
    
      <a href="/search">
        <li class="mobile-menu-item">
          
          
            站内搜索
          
        </li>
      </a>
    
  </ul>
</nav>

    <div class="container" id="mobile-panel">
      <header id="header" class="header"><div class="logo-wrapper">
  <a href="/." class="logo">八一</a>
</div>

<nav class="site-navbar">
  
    <ul id="menu" class="menu">
      
        <li class="menu-item">
          <a class="menu-item-link" href="/archives">
            
            
              文章
            
          </a>
        </li>
      
        <li class="menu-item">
          <a class="menu-item-link" href="/tags">
            
            
              标签
            
          </a>
        </li>
      
        <li class="menu-item">
          <a class="menu-item-link" href="/about">
            
            
              关于/友链
            
          </a>
        </li>
      
        <li class="menu-item">
          <a class="menu-item-link" href="/search">
            
            
              站内搜索
            
          </a>
        </li>
      
    </ul>
  
</nav>

      </header>

      <main id="main" class="main">
        <div class="content-wrapper">
          <div id="content" class="content">
            
  
  <article class="post">
    <header class="post-header">
      <h1 class="post-title">
        
          似乎没好好研究过HTTP状态码
        
      </h1>

      <div class="post-meta">
        <span class="post-time">
          2017-10-29
        </span>
        
        
        
      </div>
    </header>

    
    
  <div class="post-toc" id="post-toc">
    <h2 class="post-toc-title">文章目录</h2>
    <div class="post-toc-content">
      <ol class="toc"><li class="toc-item toc-level-2"><a class="toc-link" href="#总述"><span class="toc-text">总述</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#2XX"><span class="toc-text">2XX</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#200-OK"><span class="toc-text">200 OK</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#204-No-Content"><span class="toc-text">204 No Content</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#206-Partial-Content"><span class="toc-text">206 Partial Content</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#3XX"><span class="toc-text">3XX</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#301-Moved-Permanently"><span class="toc-text">301 Moved Permanently</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#302-Found"><span class="toc-text">302 Found</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#303-See-Other"><span class="toc-text">303 See Other</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#304-Not-Modified"><span class="toc-text">304 Not Modified</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#307-Temporary-Redirect"><span class="toc-text">307 Temporary Redirect</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#4XX"><span class="toc-text">4XX</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#400-Bad-Request"><span class="toc-text">400 Bad Request</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#401-Unauthorized"><span class="toc-text">401 Unauthorized</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#403-Forbidden"><span class="toc-text">403 Forbidden</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#404-Found"><span class="toc-text">404 Found</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#5XX"><span class="toc-text">5XX</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#500-Internal-Server-Error"><span class="toc-text">500 Internal Server Error</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#503-Service-Unavailable"><span class="toc-text">503 Service Unavailable</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#关于状态码和响应"><span class="toc-text">关于状态码和响应</span></a></li></ol>
    </div>
  </div>


    <div class="post-content">
      
        <p>这几天小组值班的时候总是听学长提起面试,也顺便搜了下一些传说中的面经….<br>发现差距还是挺大的,甚至这个状态码的问题也没好好总结过 <a id="more"></a><br>为了证明自己做过程序员………….就重新记录下</p>
<p>绝大部分为《图解HTTP》笔记</p>
<h2 id="总述"><a href="#总述" class="headerlink" title="总述"></a>总述</h2><blockquote>
<p>HTTP 状态码负责表示客户端 HTTP 请求的返回结果、标记服务器端 的处理是否正常、通知出现的错误等工作<br>状态码由3位数字组成,第一位是原因分类代表,剩下的两位没有特殊分类</p>
</blockquote>
<table>
<thead>
<tr>
<th>类型</th>
<th style="text-align:right">类别</th>
<th style="text-align:center">原因</th>
</tr>
</thead>
<tbody>
<tr>
<td>1XX</td>
<td style="text-align:right">Informational（信息性状态码）</td>
<td style="text-align:center">接受的请求正在处理</td>
</tr>
<tr>
<td>2XX</td>
<td style="text-align:right">Success（成功状态码）</td>
<td style="text-align:center">请求正常处理完毕</td>
</tr>
<tr>
<td>3XX</td>
<td style="text-align:right">Redirection（重定向状态码）</td>
<td style="text-align:center">需要进行附加操作以完成请求</td>
</tr>
<tr>
<td>4XX</td>
<td style="text-align:right">Client Error（客户端错误状态码）</td>
<td style="text-align:center">服务器无法处理请求</td>
</tr>
<tr>
<td>5XX</td>
<td style="text-align:right">5XX Server Error（服务器错误状态码）</td>
<td style="text-align:center">服务器处理请求错误</td>
</tr>
</tbody>
</table>
<p>常见的大概一共有14种</p>
<h2 id="2XX"><a href="#2XX" class="headerlink" title="2XX"></a>2XX</h2><h3 id="200-OK"><a href="#200-OK" class="headerlink" title="200 OK"></a>200 OK</h3><p>这个状态码应该是最常见也是我们最想见到的,代表客户端发送的请求被服务端正常处理<br>同时在响应报文内,随状态码返回的信息会随着HTTP方法不同而不同</p>
<blockquote>
<p>常见的请求方法是GET和POST,但不仅仅这两种,通常有以下8种方法：OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE和CONNECT</p>
</blockquote>
<p><img src="https://s1.ax1x.com/2018/01/01/pS2Ok8.png" alt="200"></p>
<h3 id="204-No-Content"><a href="#204-No-Content" class="headerlink" title="204 No Content"></a>204 No Content</h3><p>这个状态码代表的意思就是客户端发送的请求被服务端正常处理了<br>但是服务端并没有返回任何实体内容</p>
<blockquote>
<p>一般在只需要从客户端往服务器发送信息，而对客户端不需要发送新<br>信息内容的情况下使用</p>
</blockquote>
<h3 id="206-Partial-Content"><a href="#206-Partial-Content" class="headerlink" title="206 Partial Content"></a>206 Partial Content</h3><p>该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求<br>对于206的定义是请求必须包含Range头来标示我们想要的范围</p>
<blockquote>
<p>因此这就是说我们可以通过Range和206 Partial Content来分块获取一个大文件</p>
</blockquote>
<h2 id="3XX"><a href="#3XX" class="headerlink" title="3XX"></a>3XX</h2><h3 id="301-Moved-Permanently"><a href="#301-Moved-Permanently" class="headerlink" title="301 Moved Permanently"></a>301 Moved Permanently</h3><blockquote>
<p>永久性重定向</p>
</blockquote>
<p>该状态码表示请求的url资源被分配了新的url<br>如果已经把资源对应的URI保存为书签了<br>但是此时新的URL在Location头中给出，浏览器应该自动地保存和访问新的URL</p>
<h3 id="302-Found"><a href="#302-Found" class="headerlink" title="302 Found"></a>302 Found</h3><blockquote>
<p>临时性重定向</p>
</blockquote>
<p>从总的描述中我们可以看出这个状态码和301相似<br>只是该状态码属于临时性分配新的url<br>在本次的访问中应使用新得url,同时不用更新书签</p>
<h3 id="303-See-Other"><a href="#303-See-Other" class="headerlink" title="303 See Other"></a>303 See Other</h3><p>这个状态码也代表访问存在新的url,但应注意的是这个<br>状态码明确表示客户端应该采用GET方法获取资源</p>
<blockquote>
<p>比如当使用POST方法访问CGI程序其执行后的处理结果是希望客户端能以GET方法重定向<br>到另一个URI上去时，返回303状态码。虽然302 Found状态码也可以实现相同的功能，但<br>这里使用303状态码是最理想的</p>
</blockquote>
<h3 id="304-Not-Modified"><a href="#304-Not-Modified" class="headerlink" title="304 Not Modified"></a>304 Not Modified</h3><p>该状态码表示客户端发送附带条件的请求时，304状态码返回时，不包含任何响应的主体部分<br>服务器告诉客户，原来缓冲的文档还可以继续使用<br>304虽然被划分在3XX类别中，但是和重定向没有关系</p>
<p>比如在包含If-Modified的网页中，服务器会自动完成 Last Modified 和 If Modified Since 的比较，完成缓存或者更新<br>而动态页面则是在消息头中定义Last Modified,最后形成这样的结果</p>
<blockquote>
<p>第一次访问 200<br>鼠标点击二次访问 (Cache)<br>按F5刷新 304<br>按Ctrl+F5强制刷新 200</p>
</blockquote>
<p>附带条件的请求是指采用 GET 方法的请求报文中包含 If-Match，If-ModifiedSince，If-None-Match，If-Range，If-Unmodified-Since 中任一首部</p>
<h3 id="307-Temporary-Redirect"><a href="#307-Temporary-Redirect" class="headerlink" title="307 Temporary Redirect"></a>307 Temporary Redirect</h3><blockquote>
<p>临时重定向</p>
</blockquote>
<p>这个状态码和302含义一样,不过上面没有说到</p>
<blockquote>
<p>当 301、302、303响应状态码返回时，几乎所有的浏览器都会把POST改成 GET，并删除请求报文内的主体，之后请求会自动再次发送<br>301、302标准是禁止将POST方法改变成GET方法的，但实际使用时大家都还是会那么做</p>
</blockquote>
<p>而这个307比较听话,会遵照浏览器标准，不会从POST变成GET</p>
<h2 id="4XX"><a href="#4XX" class="headerlink" title="4XX"></a>4XX</h2><h3 id="400-Bad-Request"><a href="#400-Bad-Request" class="headerlink" title="400 Bad Request"></a>400 Bad Request</h3><p>该状态码表示请求报文中存在语法错误。当错误发生时，需修改请求的内容后再次发送请求</p>
<h3 id="401-Unauthorized"><a href="#401-Unauthorized" class="headerlink" title="401 Unauthorized"></a>401 Unauthorized</h3><p>该状态码表示发送的请求需要有通过HTTP认证（BASIC认证、DIGEST 认证）的认证信息。另外若之前已进行过1次请求，则表示用户认证失败</p>
<p><img src="https://s1.ax1x.com/2018/01/01/pS2jfg.png" alt="401"></p>
<h3 id="403-Forbidden"><a href="#403-Forbidden" class="headerlink" title="403 Forbidden"></a>403 Forbidden</h3><p>这个状态码也是比较常见的,表示尝试请求访问的资源被禁止访问<br>未获得文件系统的访问授权，访问权限出现某些问题（从未授权的发送源IP 地址试图访问）等列举的情况都可能是发生403的原因</p>
<h3 id="404-Found"><a href="#404-Found" class="headerlink" title="404 Found"></a>404 Found</h3><p>又一个常见的状态码,表示服务器没有此资源<br>也可能是服务器无情的拒绝了你,但不想告诉你为什么</p>
<blockquote>
<p>这个在python的开发中我主要见到的主要是路由未定义而导致的404</p>
</blockquote>
<h2 id="5XX"><a href="#5XX" class="headerlink" title="5XX"></a>5XX</h2><h3 id="500-Internal-Server-Error"><a href="#500-Internal-Server-Error" class="headerlink" title="500 Internal Server Error"></a>500 Internal Server Error</h3><p>该状态码表明服务器端在执行请求时发生了错误。也有可能是Web应用存在的bug或某些临时的故障</p>
<blockquote>
<p>这个正如官方解释,在开发中将常遇到的问题就是代码错误,至少我碰到的是这样</p>
</blockquote>
<h3 id="503-Service-Unavailable"><a href="#503-Service-Unavailable" class="headerlink" title="503 Service Unavailable"></a>503 Service Unavailable</h3><p>这个状态码代表的是服务器超过负载或者停机维护,无法处理请求</p>
<h2 id="关于状态码和响应"><a href="#关于状态码和响应" class="headerlink" title="关于状态码和响应"></a>关于状态码和响应</h2><p>不少返回的状态码响应都是错误的，但是用户可能察觉不到这点。比如 Web 应用程序内部发生错误，状态码依然返回200 OK，这种情况也经常遇到</p>
<p>参考：<a href="https://zh.wikipedia.org/wiki/HTTP%E7%8A%B6%E6%80%81%E7%A0%81" target="_blank" rel="noopener">状态码维基百科</a><br><a href="http://blog.163.com/wangzhenbo85@126/blog/static/101363282201322232353787/" target="_blank" rel="noopener">304 Not Modified状态码</a><br><a href="http://niutuku.com/tech/www/304-Not-Modified.shtml" target="_blank" rel="noopener">304是什么意思</a></p>

      
    </div>

    
      
      



      
      
    

    
      <footer class="post-footer">
        
          <div class="post-tags">
            
              <a href="/tags/HTTP/">HTTP</a>
            
              <a href="/tags/网络协议/">网络协议</a>
            
          </div>
        
        
        
  <nav class="post-nav">
    
      <a class="prev" href="/2017/11/04/几种开发时安全验证的实现/">
        <i class="iconfont icon-left"></i>
        <span class="prev-text nav-default">python开发时邮箱验证,短信验证,图片验证码的实现</span>
        <span class="prev-text nav-mobile">上一篇</span>
      </a>
    
    
      <a class="next" href="/2017/10/27/各种注入姿势/">
        <span class="next-text nav-default">各种注入姿势</span>
        <span class="prev-text nav-mobile">下一篇</span>
        <i class="iconfont icon-right"></i>
      </a>
    
  </nav>

      </footer>
    

  </article>


          </div>
          
  <div class="comments" id="comments">
      <div id="disqus_thread">
        <noscript>
          Please enable JavaScript to view the
          <a href="//disqus.com/?ref_noscript">comments powered by Disqus.</a>
        </noscript>
      </div> 
    </div>
  </div>


        </div>
      </main>

      <footer id="footer" class="footer">

  <div class="social-links">
    
      
        
          <a href="https://github.com/bay1" class="iconfont icon-github" title="github"></a>
        
      
    
      
        
          <a href="http://weibo.com/3190704711/profile?topnav=1&wvr=6&is_all=1" class="iconfont icon-weibo" title="weibo"></a>
        
      
    
      
    
      
    
      
    
    
    
  </div>


<div class="copyright">
  <span class="copyright-year">
    
    &copy; 
     
      2016 - 
    
    2018
    <span class="author">bay1</span>
  </span>
</div>
      </footer>

      <div class="back-to-top" id="back-to-top">
        <i class="iconfont icon-up"></i>
      </div>
    </div>

    
  
  <script type="text/javascript">
    var disqus_config = function () {
        this.page.url = 'https://bay1.top/2017/10/29/似乎没好好研究过HTTP状态码/';
        this.page.identifier = '2017/10/29/似乎没好好研究过HTTP状态码/';
        this.page.title = '似乎没好好研究过HTTP状态码';
    };
    (function() {
    var d = document, s = d.createElement('script');

    s.src = '//https-blog-flywinky-top-1.disqus.com/embed.js';

    s.setAttribute('data-timestamp', +new Date());
    (d.head || d.body).appendChild(s);
    })();  
  </script>



    
  





  
    <script type="text/javascript" src="/lib/jquery/jquery-3.1.1.min.js"></script>
  

  
    <script type="text/javascript" src="/lib/slideout/slideout.js"></script>
  

  
    <script type="text/javascript" src="/lib/fancybox/jquery.fancybox.pack.js"></script>
  


    <script type="text/javascript" src="/js/src/even.js?v=2.6.0"></script>
<script type="text/javascript" src="/js/src/bootstrap.js?v=2.6.0"></script>
<script src="/js/prettify.js"></script>
<script type="text/javascript">
$(document).ready(function(){
 $('pre').addClass('prettyprint');
   prettyPrint();
 })
</script>
  </body>
</html>
